module.exports={
  schedule:{
    interval:'1m',
    type:'all'
  },
  /**
   * 每过一分钟就轮询一次数据库
   * 将所有已结束的考试中未提交的考生的成绩设置为0
   * @param ctx
   */
  async task(ctx){
    const {app} = ctx
    const conn = await app.mysql.beginTransaction()
    let count = 0;
    try {
      let nowDate = new Date()
      /** @type {Exam[]} */
      let allExam = await conn.select('exam')
      for(let i in allExam){
        let e = allExam[i]
        let endDate = new Date(e.end_time)
        //判断考试是否结束
        if(nowDate > endDate){
          //已结束
          /**
           * 获取该班级全部非管理员用户
           * @type {UserClass[]}
           */
          let classAllUser = await conn.select("u_class",{c_id:e.c_id,isTeacher:false})
          //遍历查询全部考生的成绩，如果没有则添加0分
          for(let j in classAllUser){
            let u = classAllUser[j]
            let grade = await conn.get('grade',{u_id:u.u_id,e_id:e.id})
            //如果考生已有成绩则直接跳过
            if(grade!=null) continue;
            let nullGrade = {
              u_id:u.u_id,
              e_id:e.id,
              pass:false,
              userCommit:false,
              teacherShow:true
            }
            //将0分插入
            await conn.insert('grade',nullGrade)
            count++
          }
        }
      }
      app.logger.info(`为${count}个未提交的考生设置为0分`)
      await conn.commit()
    }catch (e){
      await conn.rollback()
      app.logger.error(e)
    }
  }
}